/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectBooleanCheckbox;
import com.icesoft.faces.context.effects.JavascriptContext;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.ugc.cnel.manabi.entidades.Inspeccion;
import org.ugc.cnel.manabi.entidades.Inspector;
import org.ugc.cnel.manabi.jpa.InspectorJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.IllegalOrphanException;
import org.ugc.cnel.manabi.jpa.exceptions.NonexistentEntityException;

/**
 *
 * @author Admin
 */
public class inspectorBakenBean {

    /** Injection Managed Bean*/
    private eventosBakenBean ventana;
    private navegacionBakenBean nav;
    /** Propiedades Varias*/
    private String nombre_inspector;
    private String apellido_inspector;
    private boolean activo;
    private String telefono;
    private String email;
    private List<Inspector> lista;
    private InspectorJpaController inspjpa;
    private boolean edit;
    private boolean btn_save_disable = true;
    private Inspector inspectorseleccionado = null;
    /** Binding de Controles */
    private HtmlInputText txt_nombres;
    private HtmlInputText txt_apellidos;
    private HtmlSelectBooleanCheckbox chk_activo;
    private HtmlInputText txt_telefono;
    private HtmlInputText txt_email;

    /** Creates a new instance of ciudadBakenBean */
    public inspectorBakenBean() {
        //cargar el jpa de ciuadaes
        FacesContext facescontext = FacesContext.getCurrentInstance();
        inspjpa = (InspectorJpaController) facescontext.getELContext().getELResolver().getValue(facescontext.getELContext(), null, "inspectorJPA");
    }

    /** Setter and Getter Injection Managed Bean*/
    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    /** Getter and Setter Propiedades Varias*/
    public boolean isBtn_save_disable() {
        return btn_save_disable;
    }

    public void setBtn_save_disable(boolean btn_save_disable) {
        this.btn_save_disable = btn_save_disable;
    }

    public boolean isEdit() {
        return edit;
    }

    public void setEdit(boolean edit) {
        this.edit = edit;
    }

    public Inspector getInspectorseleccionado() {
        return inspectorseleccionado;
    }

    public void setInspectorseleccionado(Inspector inspectorseleccionado) {
        this.inspectorseleccionado = inspectorseleccionado;
    }

    public List<Inspector> getLista() {
        return inspjpa.findInspectorEntities();
    }

    public void setLista(List<Inspector> lista) {
        this.lista = lista;
    }

    public String getNombre_inspector() {
        return nombre_inspector;
    }

    public void setNombre_inspector(String nombre_inspector) {
        this.nombre_inspector = nombre_inspector;
    }

    public boolean isActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public String getApellido_inspector() {
        return apellido_inspector;
    }

    public void setApellido_inspector(String apellido_inspector) {
        this.apellido_inspector = apellido_inspector;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    /** Getter and Setter Binding de Controles */
    public HtmlInputText getTxt_nombres() {
        return txt_nombres;
    }

    public void setTxt_nombres(HtmlInputText txt_nombres) {
        this.txt_nombres = txt_nombres;
    }

    public HtmlSelectBooleanCheckbox getChk_activo() {
        return chk_activo;
    }

    public void setChk_activo(HtmlSelectBooleanCheckbox chk_activo) {
        this.chk_activo = chk_activo;
    }

    public HtmlInputText getTxt_apellidos() {
        return txt_apellidos;
    }

    public void setTxt_apellidos(HtmlInputText txt_apellidos) {
        this.txt_apellidos = txt_apellidos;
    }

    public HtmlInputText getTxt_email() {
        return txt_email;
    }

    public void setTxt_email(HtmlInputText txt_email) {
        this.txt_email = txt_email;
    }

    public HtmlInputText getTxt_telefono() {
        return txt_telefono;
    }

    public void setTxt_telefono(HtmlInputText txt_telefono) {
        this.txt_telefono = txt_telefono;
    }

    /** Seccion de Metodos del Bean*/
    /**
     * Metodo que se ejecuta presionar sobre el boton de guardar
     * @param evt Evento
     */
    public void guardar(ActionEvent evt) {
        try {

            Inspector inspector = new Inspector(isEdit() ? getInspectorseleccionado().getId() : new Integer(0),
                    txt_nombres.getValue().toString().toUpperCase(),
                    txt_apellidos.getValue().toString().toUpperCase(),
                    isActivo());
            inspector.setCorreo(txt_email.getValue().toString());
            inspector.setTelefono(BigInteger.valueOf(Long.parseLong(txt_telefono.getValue().toString())));
            if (isEdit()) {
                //Editar Inspector
                inspector.setInspeccionCollection(inspectorseleccionado.getInspeccionCollection());
                inspjpa.edit(inspector);
            } else {
                //Nuevo Inspector
                inspector.setInspeccionCollection(new ArrayList<Inspeccion>());
                inspjpa.create(inspector);
            }
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Informacion");
            ventana.setPopup_conten("Inspector " + (isEdit() ? "Editado" : "Guardado") + " con exito");
            ventana.setPopup_visible(true);
            desactivar_controles();
            limpiar_text();
            //Refescar los servicios del cliente
            getLista();
            setEdit(false);
            //Ir al Scroll donde esta ubicada la tabla
            JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:new_inspector').scrollIntoView(true);");
        } catch (NonexistentEntityException ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(inspectorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(inspectorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de editar
     * @param evt Evento
     */
    public void editar(ActionEvent evt) {
        Inspector row_inspector = (Inspector) evt.getComponent().getAttributes().get("idfila");
        if (row_inspector != null) {
            activar_controles();
            load_data_inspector(row_inspector);
            setInspectorseleccionado(row_inspector);
            setEdit(true);
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de Cancelar
     * @param evt Evento
     */
    public void cancelar(ActionEvent evt) {
        limpiar_text();
        desactivar_controles();
        getNav().setPagina_contenido("indicadores/indicadores.jspx");
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de borrar
     * @param evt Evento
     */
    public void borrar(ActionEvent evt) {
        Inspector row_inspector = (Inspector) evt.getComponent().getAttributes().get("idfila");
        if (row_inspector != null) {
            setInspectorseleccionado(row_inspector);
            getVentana().setPopup_header("Advertencia");
            getVentana().setPopup_conten("¿Desea Eliminar el Registro?");
            getVentana().setTipo_ventana(eventosBakenBean.ACEPTAR_CANCELAR);
            getVentana().setPopup_visible(true);
            // Agregar el ActionListener en caso que el boton aceptar sea presionado no se si esta bien pero creo que funciona
            getVentana().limpiar_listener();
            getVentana().getBtn_1().addActionListener(new ActionListener() {

                public void processAction(ActionEvent evt) throws AbortProcessingException {
                    try {
                        inspjpa.destroy(getInspectorseleccionado().getId());
                        getLista();
                        limpiar_text();
                        desactivar_controles();
                    } catch (IllegalOrphanException ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar Ilegal");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(inspectorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (NonexistentEntityException ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar no existe Entidad");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(inspectorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (Exception ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar General");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(inspectorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de nuevo
     * @param evt Evento
     */
    public void nuevo(ActionEvent evt) {
        setEdit(false);
        activar_controles();
    }

    private void activar_controles() {
        txt_nombres.setDisabled(false);
        txt_apellidos.setDisabled(false);
        chk_activo.setDisabled(false);
        txt_telefono.setDisabled(false);
        txt_email.setDisabled(false);
        setBtn_save_disable(false);
        limpiar_text();
        txt_nombres.requestFocus();
        //Ir al Scroll donde esta ubicado el formulario
        JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:form_tbl_inspector').scrollIntoView(true);");
    }

    private void desactivar_controles() {
        txt_nombres.setDisabled(true);
        txt_apellidos.setDisabled(true);
        chk_activo.setDisabled(true);
        txt_telefono.setDisabled(true);
        txt_email.setDisabled(true);
        setBtn_save_disable(true);
        //Ir al Scroll donde esta ubicado el formulario
        JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:tbl_inspectores').scrollIntoView(true);");
    }

    private void limpiar_text() {
        txt_nombres.setSubmittedValue("");
        txt_nombres.setValue("");
        txt_apellidos.setValue("");
        txt_apellidos.setSubmittedValue("");
        chk_activo.setValue("false");
        chk_activo.setSubmittedValue("false");
        chk_activo.setSelected(false);
        txt_telefono.setValue("");
        txt_telefono.setSubmittedValue("");
        txt_email.setValue("");
        txt_email.setSubmittedValue("");
    }

    private void load_data_inspector(Inspector row_inspector) {
        txt_nombres.setSubmittedValue(row_inspector.getNombres());
        txt_apellidos.setSubmittedValue(row_inspector.getApellidos());
        chk_activo.setSubmittedValue(row_inspector.getEstado() ? "true" : "false");
        String tel = (row_inspector.getTelefono() == null ? "" : row_inspector.getTelefono().toString());
        txt_telefono.setSubmittedValue(tel);
        txt_email.setSubmittedValue(row_inspector.getCorreo());
        txt_nombres.requestFocus();
    }
}
